package my.mark.mybaibaoxiang.eventDemo.spring;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

/**
 * 监听WarnEvent事件去执行自己的操作。
 */
@Component
public class SendWarnListener {

    final static Logger logger = LoggerFactory.getLogger(SendWarnListener.class);

    /*@Autowired
    SendServiceFactory factory;*/

    /**
     * ：@EventListener注解去监听WarnEvent事件，
     * ：@Async注解让该方法异步操作：
     * 在Spring中,基于@Async标注的方法,称之为异步方法;这些方法将在执行的时候,将会在独立的线程中被执行,调用者无需等待它的完成,即可继续其他的操作。
     * 在SpringBoot环境中，要使用@Async注解，我们需要先在启动类上加上@EnableAsync注解。
     * : @Async使用默认调度线程池。也可指定线程池：@Async("warnThreadPool")
     * @param event
     */
    @Async
    @EventListener
    public void send(WarnEvent event) {
        try {
            logger.info("===================WarnEvent走了");
            /*SendService sendService = factory.getSendService(event.getType());
            sendService.send(event.getTarget(), event.getContent());*/
        } catch (Exception e) {
            logger.error("消息发送失败! cause by:" + e.getMessage(), e);
        }
    }

}
